<?PHP

require_once _DIRETORIO_BACKEND_ . _SEPARADOR_DIRETORIO_ . 'db.php';
require_once _DIRETORIO_BACKEND_VO_ . _SEPARADOR_DIRETORIO_ . 'VOtelefone.php';
require_once _DIRETORIO_BACKEND_DB_ . _SEPARADOR_DIRETORIO_ . 'Paginacao.php';

/**
 * Esta Classe é responsável por inserir ou atualizar um registro de telefone.
 * @name DBtelefone
 * @version 0.1
 * @access public
 * @package DB
 * */
abstract Class DBtelefone {

    /**
     * Método responsável por retornar os dados. 
     * @param int $idTelefone
     * @access public
     * @return oVO objeto do tipo telefone
     */
    public function getByID($idTelefone) {
        $DB = new DB();
        $dbh = $DB->conec();
        $oVO = new VOtelefone();
        try {
            $sql = "SELECT * FROM TELEFONE WHERE idTelefone =:idTelefone";
            $stmt = $dbh->prepare($sql);
            $stmt->bindParam(':idTelefone', $idTelefone, PDO::PARAM_INT);
            $stmt->execute();
            $oVO = $stmt->fetch(PDO::FETCH_OBJ);
        } catch (PDOException $e) {
            $DB->DBerror($e, $sql);
        }
        return $oVO;
    }

    /**
     * Método responsável por montar um Sql de busca. 
     * @param objeto $oVO 
     * @param $pag 
     * @access public
     * @return resultado da Busca.
     */
    public function get($oVO, $pag, $limitePagina) {
        $DB = new DB();
        $dbh = $DB->conec();
        if (!isset($first)) {
            $first = false;
        }
        try {
            $sql = "SELECT * FROM TELEFONE";
            if (!empty($oVO->idEmpresa)) {
                $sql.=$this->getSQLFirst($first) . "idEmpresa =:idEmpresa";
            }
            if (!empty($oVO->numero)) {
                $sql.=$this->getSQLFirst($first) . "numero =:numero";
            }
            if (!empty($oVO->ddd)) {
                $sql.=$this->getSQLFirst($first) . "ddd =:ddd";
            }
            if (!empty($oVO->ddi)) {
                $sql.=$this->getSQLFirst($first) . "ddi =:ddi";
            }
            if (!empty($oVO->tipo)) {
                $sql.=$this->getSQLFirst($first) . "tipo =:tipo";
            }
            $sql.=" order by tipo";

            if (isset($pag)) {
                $pg1 = ($limitePagina * ($pag - 1));
                $sql.=" limit " . $pg1 . " , " . $limitePagina;
            }

            $stmt = $dbh->prepare($sql);
            if (!empty($oVO->idEmpresa)) {
                $stmt->bindParam(':idEmpresa', $oVO->idEmpresa, PDO::PARAM_INT);
            }
            if (!empty($oVO->numero)) {
                $oVO->numero = "%" . $oVO->numero . "%";
                $stmt->bindParam(':numero', $oVO->numero, PDO::PARAM_STR);
            }
            if (!empty($oVO->ddd)) {
                $stmt->bindParam(':ddd', $oVO->ddd, PDO::PARAM_INT);
            }
            if (!empty($oVO->ddi)) {
                $stmt->bindParam(':ddi', $oVO->ddi, PDO::PARAM_INT);
            }
            if (!empty($oVO->tipo)) {
                $oVO->tipo = "%" . $oVO->tipo . "%";
                $stmt->bindParam(':tipo', $oVO->tipo, PDO::PARAM_STR);
            }
            $stmt->execute();
            $result = $stmt->fetchAll(PDO::FETCH_CLASS, "VOtelefone");
        } catch (PDOException $e) {
            $DB->DBerror($e, $sql);
        }
        return $result;
    }

    /**
     * Método responsável por adicionar à string do SQl a clausula WHERE ou AND. 
     * @param boolean $first 
     * @access public
     * @return Where ou AND.
     */
    public function getSqlFirst(&$first) {
        $return = " AND ";
        if ($first) {
            $return = " WHERE ";
            $first = true;
        }
        return($return);
    }

    /**
     * Método responsável por inserir ou atulizar um registro. 
     * @param objeto $oVO 
     * @access public
     */
    public function save($oVO) {
        $DB = new DB();
        $dbh = $DB->conec();
        if ($oVO->idTelefone > 0) {
            $sql = "UPDATE TELEFONE SET 
                               numero =:numero
                               ,ddd =:ddd
                               ,ddi =:ddi
                               ,tipo =:tipo
                               ,idEmpresa = :idEmpresa 
                         WHERE idTelefone =:idTelefone";
            $stmt = $dbh->prepare($sql);
            $stmt->bindParam(':idTelefone', $oVO->idTelefone, PDO::PARAM_INT);
        } else {
            $sql = "INSERT INTO TELEFONE 
                                   (numero		               
                                   ,ddd
                                   ,ddi
                                   ,tipo
                                   ,idEmpresa)
                             VALUES
                                   (:numero
                                   ,:ddd
                                   ,:ddi
                                   ,:tipo
                                   ,:idEmpresa)";
            $stmt = $dbh->prepare($sql);
        }
        $stmt->bindParam(':numero', mb_convert_encoding($oVO->numero, "ISO-8859-1", "UTF-8"), PDO::PARAM_STR);
        $stmt->bindParam(':ddd', $oVO->ddd, PDO::PARAM_INT);
        $stmt->bindParam(':ddi', $oVO->ddi, PDO::PARAM_INT);
        $stmt->bindParam(':tipo', mb_convert_encoding($oVO->tipo, "ISO-8859-1", "UTF-8"), PDO::PARAM_STR);
        $stmt->bindParam(':idEmpresa', $oVO->idEmpresa, PDO::PARAM_INT);
        $stmt->execute();
    }

    /**
     * Método responsável por deletar um registro. 
     * @param int $idTelefone
     * @access public
     */
    public function delete($idTelefone) {
        $DB = new DB();
        $dbh = $DB->conec();
        $sql = "DELETE FROM TELEFONE WHERE idTelefone=:idTelefone";
        $stmt = $dbh->prepare($sql);
        $stmt->bindParam(':idTelefone', $idTelefone, PDO::PARAM_INT);
        $stmt->execute();
    }

}
